﻿package com.manyiaby.view.viewutils;

import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.view.View;
import android.view.animation.AlphaAnimation;
import android.view.animation.Animation;
import android.view.animation.DecelerateInterpolator;
import android.view.animation.OvershootInterpolator;
import android.view.animation.RotateAnimation;
import android.view.animation.TranslateAnimation;

import com.manyiaby.R;

import static com.manyiaby.R.layout.login_layout;

/**
 * 动画
 */
public class AnimationUtils {

    /**
     * 缩放操作,放大1.5倍再还原
     * translationX,translationY是平移的距离,scaleX表示缩放倍数 ,scaleY表示缩放倍数,rotationY绕Y轴转
     * rotationX绕X轴转，rotation绕z轴转，alpha透明度
     * translation移动的距离，以当前控件为原点，向右为正方向，参数translationY表示移动的距离
     * @param mView
     */
    public static void scale(View mView) {
        ObjectAnimator animator = ObjectAnimator.ofFloat(mView, "scaleY", 1f, 1.2f, 1f);
        animator.setDuration(1000);
        animator.start();
        ObjectAnimator animatorX = ObjectAnimator.ofFloat(mView, "scaleX", 1f, 1.2f, 1f);
        animatorX.setDuration(1000);
        animatorX.start();

//        AnimatorSet animatorSet = new AnimatorSet();//组合动画
//        ObjectAnimator scaleX = ObjectAnimator.ofFloat(mView, "scaleX", 1f,1.2f, 1f);
//        ObjectAnimator scaleY = ObjectAnimator.ofFloat(mView, "scaleY", 1f,1.2f, 1f);
//
//        animatorSet.setDuration(1500);
//        animatorSet.setInterpolator(new DecelerateInterpolator());
//        animatorSet.play(scaleX).with(scaleY);//两个动画同时开始
//        animatorSet.start();

//        //第一个参数为 view对象，第二个参数为 动画改变的类型，第三，第四个参数依次是开始透明度和结束透明度。
//        ObjectAnimator alpha = ObjectAnimator.ofFloat(mView, "alpha", 0f, 1f);
//        alpha.setDuration(1500);//设置动画时间
//        alpha.setInterpolator(new DecelerateInterpolator());//设置动画插入器，减速
//        alpha.setRepeatCount(0);//设置动画重复次数，这里-1代表无限
//        alpha.start();//启动动画。
    }


    public static void hiddenAnimation(View vTarget, long duration) {
        ViewWrapper wrapper = new ViewWrapper(vTarget);
        ObjectAnimator.ofInt(wrapper, "height", 0).setDuration(duration).start();
    }

    public static void showAnimation(View vTarget, int height, long duration) {
        ViewWrapper wrapper = new ViewWrapper(vTarget);
        ObjectAnimator.ofInt(wrapper, "height", height).setDuration(duration).start();
    }

    private static class ViewWrapper {
        private View mTarget;

        public ViewWrapper(View target) {
            mTarget = target;
        }

        public int getHeight() {
            return mTarget.getLayoutParams().height;
        }

        public void setHeight(int height) {
            mTarget.getLayoutParams().height = height;
            mTarget.requestLayout();
        }
    }


    /**
     * View左右抖动效果
     * @param v
     */
    public static void goShake(View v) {
        TranslateAnimation animation = new TranslateAnimation(0, -5, 0, 0);
        animation.setInterpolator(new OvershootInterpolator());
        animation.setDuration(100);
        animation.setRepeatCount(2);//表示重复次数
        animation.setRepeatMode(Animation.REVERSE);//表示动画结束后,再执行,该方法有两种值， RESTART 和 REVERSE。 RESTART表示从头开始，REVERSE表示从末尾倒播。
        v.startAnimation(animation);
    }

    /**
     * View闪烁效果
     * @param v
     */
    public static void goTwinkle(View v,long durationMillis) {
        //闪烁
        AlphaAnimation animation = new AlphaAnimation(0.1f, 1.0f);
        animation.setDuration(durationMillis);
        animation.setRepeatCount(Animation.INFINITE);
        animation.setRepeatMode(Animation.REVERSE);
        animation.setFillAfter(true);//动画执行完后是否停留在执行完的状态
        v.setAnimation(animation);
        animation.start();
    }

    /**
     * 旋转动画旋转90度
     * 警告：有时候单独使用RotateAnimation无效果，则可在前面添加组合动画   AnimatorSet
     * 例：AnimationSet animationSet = new AnimationSet(true);//true Interpolator插值器,可直接给
     * animationSet 插入一些固定设置，不然你需要每个动画加一遍设置
     * animationSet.setFillAfter(true);//插值器，固定设置保留最后一帧
     * animationSet.addAnimation(你定义的动画animation);//将你的动画设置给组合动画
     * v.startAnimation(animationSet);//给View添加动画
     * @param v
     */
    public static void rotate(View v) {//RotateAnimation  旋转动画
        RotateAnimation animation =new RotateAnimation(0f,-90f,Animation.RELATIVE_TO_SELF,
                0.5f,Animation.RELATIVE_TO_SELF,0.5f);
        animation.setDuration(300);//设置动画持续时间
        animation.setFillAfter(true);//动画执行完后是否停留在执行完的状态
        v.setAnimation(animation);
        animation.start();
    }
    /**
     * 透明度渐变动画 由透明度0变化到透明度为1
     * @param v
     */
    public static void alpha(View v,long durationMillis) {// AlphaAnimation 透明度动画
        AlphaAnimation alphaAnimation = new AlphaAnimation(0, 1);//初始化操作，参数传入0和1，即由透明度0变化到透明度为1
        alphaAnimation.setFillAfter(true);//动画结束后保持状态
        alphaAnimation.setDuration(durationMillis);//动画持续时间，单位为毫秒
        v.startAnimation(alphaAnimation);//开始动画
    }

    /**
     * 透明度渐变动画 由透明度0变化到透明度为1
     * @param v
     */
    public static void alphaNull(View v,long durationMillis) {
        AlphaAnimation alphaAnimation = new AlphaAnimation(1, 0);//初始化操作，参数传入0和1，即由透明度0变化到透明度为1
        alphaAnimation.setFillAfter(true);//动画结束后保持状态
        alphaAnimation.setDuration(durationMillis);//动画持续时间，单位为毫秒
        v.startAnimation(alphaAnimation);//开始动画
    }



   /**
    * 由下往上移
    */
    public static void setBottom_in(View v){//TranslateAnimation 平移动画
        /**
         *   对应xml:
         *    <set xmlns:android="http://schemas.android.com/apk/res/android">
         *            <translate
         *            android:duration="500"
         *            android:fromYDelta="0"
         *            android:toYDelta="-100%" />
         *    </set>
        TranslateAnimation translateAnimation = new TranslateAnimation(0,0,0,-100);
        translateAnimation.setDuration(500);
        translateAnimation.setFillAfter(true);
        v.startAnimation(translateAnimation);
        v.setVisibility(View.GONE);
    }

   /**
    * 由上往下移动
    */
    public static void setTop_in(View v){//ScaleAnimation 缩放动画

        /**
         *          1.Scale缩放动画 标签为缩放节点
         *          android:fromXscale="1.0" 表示开始时X轴缩放比例为 1.0 (原图大小 * 1.0 为原图大小)
         *          android:toXscale="0.0"表示结束时X轴缩放比例为0.0(原图大小 *0.0 为缩小到看不见)
         *         android:fromYscale="1.0" 表示开始时Y轴缩放比例为 1.0 (原图大小 * 1.0 为原图大小)
         *         android:toYscale="0.0"表示结束时Y轴缩放比例为0.0(原图大小 *0.0 为缩小的看不到了)
         *         android:pivotX="50%" X轴缩放的位置为中心点
         *         android:pivotY="50%" Y轴缩放的位置为中心点
         *         android:duration="2000" 动画播放时间 这里是2000毫秒也就是2秒
         *         这个动画布局设置动画从大到小进行缩小。
         * pivotXType和pivotXValue(这里以X为例)。我们知道xml文件中pivotX的取值可以为数值、百分数、百分数p，
         * 如50，50%，50%p。当为数值时，表示在当前View的左上角，即原点处加上50px，做为旋转点X坐标;如果是50%
         * 表示在当前控件的左上角加上自己宽度的50%做为旋转点X坐标;如果是50%p，那么就是表示在当前控件的左上角加上父控
         * 件宽度的50%做为旋转点X坐标。
         * 这里的pivotXType就是用来指定我们采取的是哪种数值的。它有三种值：Animation.ABSOLUTE、
         * Animation.RELATIVE_TO_SELF、Animation.RELATIVE_TO_PARENT
         */
        ScaleAnimation scaleAnimation=new ScaleAnimation(1.0f, 1.0f, 0.0f, 1.0f,Animation.RELATIVE_TO_SELF, 100, Animation.RELATIVE_TO_SELF, 0);
        scaleAnimation.setDuration(500);
        v.startAnimation(scaleAnimation);
        v.setVisibility(View.VISIBLE);
    }

   /**
    * 缩放效果
    */
    public static void setTop_in(View v){//ScaleAnimation 缩放动画
	
        ScaleAnimation scaleAnimation = new ScaleAnimation(0.5f, 2, 0.5f, 2, Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF, 0.5f);
        scaleAnimation.setDuration(3000);
        v.startAnimation(scaleAnimation);
    }

   /**
    * 由右往左平移
    * 对应xml: anim_right_to_left
    * <?xml version="1.0" encoding="utf-8"?>
    * <set xmlns:android="http://schemas.android.com/apk/res/android"
    *     android:duration="500"  android:fillAfter="true">
    *     <!--从屏幕右边往屏幕移动 直至覆盖整个屏幕，android:fillAfter="true"保持最后一帧；100%p表示以父层View为参照物，100%自身位置开始-->
    *     <translate
    *         android:fromXDelta="100%p"
    *         android:toXDelta="0%p" />
    * </set>
    */
    public static void rightToleft(TextView view) {
        Animation anim = android.view.animation.AnimationUtils.loadAnimation(ProxyApplication.getInstance(),
                R.anim.anim_right_to_left);
        view.startAnimation(anim);
    }


   /**
    * 帧动画
    */
    <?xml version="1.0" encoding="UTF-8"?>
	<animation-list xmlns:android="http://schemas.android.com/apk/res/android"
   	 android:oneshot="false">
   	 <item android:drawable="@drawable/loading_1" android:duration="250" />
   	 <item android:drawable="@drawable/loading_2" android:duration="350" />
   	 <item android:drawable="@drawable/loading_3" android:duration="450" />
    </animation-list>

    public void startFrame(View view) {//ImageView
        view.setBackgroundResource(R.drawable.animation_loading1);
        AnimationDrawable anim = (AnimationDrawable) view.getBackground();
        anim.start();
    }
    public void stopFrame(View view) {//ImageView
        AnimationDrawable anim = (AnimationDrawable) view.getBackground();
        if (anim.isRunning()) { //如果正在运行,就停止
            anim.stop();
        }
    }




}
